package es.nadalgoyo.frikiquest.bbdd.util;

import java.util.ArrayList;

import es.nadalgoyo.frikiquest.bbdd.tablas.ListTablas;
import es.nadalgoyo.frikiquest.log.Log;
import es.sergionadal.mvc.bbdd.tablas.Tabla;
import es.sergionadal.mvc.vo.CampoVO;
import es.sergionadal.mvc.vo.ForeignKeyVO;

public class CreateSentenciaString {

	public static String createTable(Tabla tabla, ListTablas listTablas) {
		String sql = "CREATE TABLE ".concat(tabla.getName()).concat("(");
		boolean isFirstTime = true;
		for (CampoVO param : tabla.getCampos()) {
			if (!isFirstTime)
				sql = sql.concat(",");

			sql = sql.concat(param.getNombreParametro()).concat(" ")
					.concat(param.getTipoParametro());

			if (param.getConstraint() != null
					&& !param.getConstraint().trim().equals(""))
				sql = sql.concat(" ").concat(param.getConstraint());

			isFirstTime = false;
		}

		sql = sql.concat(getForeignKeys(tabla, listTablas));

		sql = sql.concat(")");
		Log.d(sql);
		return sql;
	}

	public static String createDropTable(Tabla tabla) {
		return "DROP TABLE IF EXISTS ".concat(tabla.getName());
	}

	private static String getForeignKeys(Tabla tabla, ListTablas listTablas) {
		String sql = "";
		ArrayList<ForeignKeyVO> fks = tabla.getForeignKey(listTablas);

		if (fks != null)
			for (ForeignKeyVO fk : fks) {
				StringBuffer sb = new StringBuffer();
				sb.append("FOREIGN KEY(".concat(
						fk.getCampoHijo().getNombreParametro()).concat(")"));

				sb.append(" REFERENCES ".concat(fk.getTabla().getName())
						.concat("(")
						.concat(fk.getCampoPadre().getNombreParametro())
						.concat(")"));

				sql = sql.concat(", ".concat(sb.toString()));

			}
		return sql;
	}

}
